/************************************************************************
*Definicion de generador de comandos de 3 direcciones                   *
*Author     :   Simon Emmanuel Gutierrez Brida                          *
*Version    :   0.2                                                     *
*Fecha      :   Octubre/2011                                            *
*----------------------------------------------------                   *
*Define la estructura  y funciones asociadas para un generador de       *
*comandos de 3 direcciones                                              *
*************************************************************************/

#ifndef GENCOM3D_H
#define GENCOM3D_H

#include "listac3d.h"
#include "comando3d.h"

typedef struct {
    ListaC3D *comandos;
} Codigo3D;

/**
 * Genera un nuevo codigo de tres direcciones
 */
Codigo3D* inicializarCodigo3D();

/**
 * Agrega un comando
 * parametros
 * codigo3d: codigo de tres direcciones
 * comando: nuevo comando a agregar
 */
int agregar_comando(Codigo3D *codigo3d, Com3D *comando); //verifica que el comando este bien construido, si el comando requiere una variable y un label verifica que se cumpla

/**
 * Obtiene un comando de un codigo de tres direcciones
 * parametros
 * codigo3d: codigo de tres direcciones
 * index: el indice del comando a obtener
 */
Com3D* obtener_comando(Codigo3D *codigo3d, int index);

/**
 * Obtiene la cantidad de comandos que un codigo de tres direcciones tiene
 * parametros
 * codigo3d: el codigo de tres direcciones del cual se va a obtener la cantidad de comandos
 */
int cantidadComandos(Codigo3D *codigo3d);

/**
 * Elimina un comando de un codigo de tres direcciones
 * parametros
 * codigo3d: el codigo de tres direcciones
 * index: el indice del comando a eliminar
 */
void eliminar_comando(Codigo3D *codigo3d, int index);

#endif